function CFlip (iX, iY, szText, szPinyn, szBackImage, szImage, oParentContainer, iWidth){
    var degToRad = Math.PI / 180;
    var _oContainer;
    var _oParent;
    var _oText;
    var _oPinyin;
    var _oImage;
    var _oBackImage;
    var _oValue = 0;        // 角度
    var _oUpdate = false;
    var _oStep = 6;
    var _oLastDirect = false;   // 最后一次的旋转方向 true : 顺时针 false：逆时针
    var _oParentContainer;

    this._init = function(iX, iY, szText, szPinyn, szBackImage, szImage, oParentContainer, iWidth){
        _oContainer = new createjs.Container();
        _oContainer.x = iX;
        _oContainer.y = iY;
        oParentContainer.addChild(_oContainer);

        _oBackImage = createBitmap(szBackImage);
        _oContainer.addChild(_oBackImage);

        _oImage = createBitmap(szImage);
        _oContainer.addChild(_oImage);
        _oImage.x = (iWidth - _oImage.getBounds().width) / 2;
        _oImage.y = 30;
        _oImage.visible = false;

        _oText = new createjs.Text();
        _oText.text = szText;
        _oText.font = "bold 80px STKaiti";
        _oText.color = "#007700";
        _oText.textAlign = "left";

        _oText.x = (iWidth - _oText.getBounds().width) / 2;
        _oText.y = 80;
        _oContainer.addChild(_oText);

        _oPinyin = new createjs.Text();
        if (!szPinyn || szPinyn == '') {
            _oPinyin.text = ' ';
        } else {
            _oPinyin.text = szPinyn;
        }
        _oPinyin.font = "bold 70px STKaiti";
        _oPinyin.color = "#007700";
        _oPinyin.textAlign = "left";
        _oPinyin.x = (iWidth - _oPinyin.getBounds().width) / 2;
        _oPinyin.y = 180;
        _oContainer.addChild(_oPinyin);

        _oContainer.on("mousedown", function(event) {
            if ((event.stageX - iX) > (iWidth / 2)) {
                _oStep = -3;
            } else {
                _oStep = 3;
            }
            _oUpdate = true;
        });
    };

    _oParent = this;
    this.flipUpdate = function() {
        if (_oUpdate) {
            _oValue += _oStep;
            _oContainer.y = -Math.sin(_oValue * degToRad) * iWidth / 2 + iY;
            _oContainer.skewY = _oValue;
            _oContainer.x = -iWidth * 0.5 * Math.cos(_oValue * degToRad) + iWidth / 2 + iX;

            if (_oValue == -90) {
                if (_oStep < 0) {
                    _oImage.visible = true;
                    _oText.visible = false;
                    _oPinyin.visible = false;
                } else {
                    _oImage.visible = false;
                    _oText.visible = true;
                    _oPinyin.visible = true;
                }
            } else if (_oValue == -270) {
                _oImage.visible = false;
                _oText.visible = true;
                _oPinyin.visible = true;
            } else if (_oValue == 90) {
                if (_oStep < 0) {
                    _oImage.visible = false;
                    _oText.visible = true;
                    _oPinyin.visible = true;
                } else {
                    _oImage.visible = true;
                    _oText.visible = false;
                    _oPinyin.visible = false;
                }
            } else if (_oValue == 270) {
                _oImage.visible = false;
                _oText.visible = true;
                _oPinyin.visible = true;
            }

            if (_oValue % 180 == 0) {
                _oUpdate = false;
            }
            if (_oValue % 360 == 0) {
                _oValue = 0;
            }
        }
    };

    this._flip = function(){
        _oUpdate = true;
    };

    this.unload = function () {
        _oContainer.removeAllChildren();
        _oContainer.off("mousedown");
        _oParentContainer.removeChild(_oContainer);
    };

    this.child = function () {
        return _oContainer;
    };

    _oParentContainer = oParentContainer;

    this._init(iX, iY, szText, szPinyn, szBackImage, szImage, oParentContainer, iWidth);
    return this;
}